﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "IType.h"
#include "ElementCreationOptions.h"

namespace gcmp
{
    class IDocument;

    /// \brief 通用类型对象接口
    class GCMP_MODEL_INTERFACE_EXPORT IGenericType : public IType
    {
        DEFINE_CAST_DERIVED(gcmp::IGenericType, gcmp::IType);
    public:

        /// \brief 创建通用类型对象
        /// \param pDocument 所属文档
        /// \param typeName 类型名
        /// \param eco 元素创建选项，默认为Normal
        /// \return 通用类别指针
        static IGenericType* Create(IDocument* pDocument, const std::wstring& typeName, ElementCreationOptions eco = ElementCreationOptions::Normal);

    public:
        /// \brief 获取Implementation Uid
        ///
        /// \return UniIdentity 返回ImplementationUid
        static UniIdentity GetImplementationUid();

    };
}
